package com.newtouch.bxzs.business.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.business.product.model.*;
import com.newtouch.bxzs.common.base.model.bo.PageParam;

import java.util.List;

/**
 * 产品的service类
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2020/12/31 15:48</td>
 * <td>xiongdianqiang</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author xiongdianqiang
 * @version 1.0.0
 * @since 1.0.0
 */

public interface ProductService {

    /**
     * 查询产品详情
     *
     * @param productId 产品id
     * @return ProductBO类
     */
    ProductDetailBO getProductDetail(String productId);

    /**
     * 删除产品
     *
     * @param productIds 产品id集合
     * @return 受影响行数
     */
    Integer deleteProduct(List<String> productIds);

    /**
     * 改变产品状态
     *
     * @param changeStatusVO 改变产品状态类VO
     * @return 受影响行数
     */
    Integer changeProductState(ChangeStateVO changeStatusVO);

    /**
     * 查看产品列表
     *
     * @param productVO 查看产品列表VO类
     * @param way       判断是查看发布列表还是新增发布列表
     * @return ProductBO分页
     */
    IPage<ProductBO> getProductList(ProductVO productVO, Boolean way);

    /**
     * 新增或修改产品发布
     *
     * @param modifyProductVO 新增或修改产品发布VO类
     * @return 成功或者新增的主键
     */
    String modifyProduct(ModifyProductVO modifyProductVO);

    /**
     * 展示产品营销话术列表
     *
     * @param productAppVO ProductAppVO类
     * @return ProductMarketingDiscourseListBO
     */
    IPage<ProductMarketingDiscourseBO> getProductMarketingDiscourseList(ProductAppVO productAppVO);

    /**
     * 查看产品营销话术详情
     *
     * @param productId 产品id
     * @return ProductMarketingDiscourseDetailBO类
     */
    ProductMarketingDiscourseDetailBO getProductMarketingDiscourseDetail(String productId);

    /**
     * 查看产品佣金比率列表
     *
     * @param pageParam 分页参数
     * @return IPage<ProductCommissionRateBO>
     */
    IPage<ProductCommissionRateBO> getProductCommissionRateList(PageParam pageParam);

    /**
     * 在App端查看产品列表
     *
     * @param productAppVO app展示产品列表VO类
     * @return ProductOnAppListBO
     */
    IPage<ProductOnAppBO> getProductListOnApp(ProductAppVO productAppVO);

    /**
     * 在App端根据所选保险公司查看产品列表
     *
     * @param productCompanyVO 根据保险公司查看产品列表VO
     * @return ProductOnAppListBO
     */
    IPage<ProductOnAppBO> getProductListByCompany(ProductCompanyVO productCompanyVO);


    /**
     * 按照产品名称排序查看产品列表
     *
     * @param productName 产品名称
     * @return ProductListMarketingBO
     */
    ProductListMarketingBO getProductListByMarketing(String productName);

    /**
     * 展示产品地区排名
     *
     * @param productRegionRankingVO 展示产品地区排名分页VO
     * @return ProductRegionRankingListBO 展示产品地区排名分页BO
     */
    ProductRegionRankingListBO getProductRegionRanking(ProductRegionRankingVO productRegionRankingVO);

    /**
     * 查询产品地区排名时展示产品列表
     *
     * @param rankingProductListVO 查询产品地区排名时展示产品列表VO
     * @return RankingProductListBO 查询产品地区排名时展示产品列表带总数
     */
    RankingProductListBO getProductRankingList(RankingProductListVO rankingProductListVO);
}
